"""
多态是指一类事物有多种形态(一个抽象类有多个子类，因为多态的概念依赖于继承)
· 定义：
    多态是一种使用对象的方式，子类重写父类方法，调用不同子类对象的相同父类方法，可以产生不同的执行结果
· 好处：
    调用灵活，有了多态，更容易编写出通用的代码，做出通用的编程，以适应需求的不断变化
· 实现步骤：
    · 定义父类，并提供公共方法
    · 定义子类，并重写父类方法
    · 传递子类对象给调用者，可以看到不同子类执行效果不同
"""


# 定义一个父类：位子类提供可以重写的公共方法
class Dog:
    def work(self):  # 父类提供统一的方法，哪怕是空的
        print("指哪儿咬哪")


# 定义一个子类：继承父类，并重写父类提供的公共方法
class ArmyDog(Dog):  # 军犬  继承Dog类
    def work(self):  # 子类重写父类同名方法
        print("追击敌人")


class DrugDog(Dog):  # 缉毒犬
    def work(self):
        print("追缉毒品")


# 这个没有继承上面的类方法，而是一个新的类，但是他也有共同的方法work
class RobotDog:  # 机器狗
    def work(self):
        print("下棋")


class Human():
    def work_with_dog(self, dog):  # 传入不同的对象，执行不同的代码，即不同弄个的work函数
        dog.work()


d1 = Dog()
d2 = ArmyDog()
d3 = DrugDog()
d4 = RobotDog()

h1 = Human()
h1.work_with_dog(d1)
h1.work_with_dog(d2)
h1.work_with_dog(d3)
h1.work_with_dog(d4)
